CtgMunicipio = function(){
	return {
		confirmProcess: function(option, ctgMunicipioId, ctgMunicipioActivo){
			Asg.Message.confirm(
					option == "delete" ? Asg.constants.CONFIRM_DELETE_MESSAGE :
						(ctgMunicipioActivo == "1" ? Asg.constants.CONFIRM_INACTIVATE_MESSAGE : Asg.constants.CONFIRM_ACTIVATE_MESSAGE), function(btn){
				if(btn != "no") CtgMunicipio.processRegister(option, ctgMunicipioId, ctgMunicipioActivo);
			});
		},
		processRegister: function(option, ctgDepartamentoId, ctgDepartamentoActivo){
			Asg.Message.progress("Guardarndo Informaci\u00F3n...");
			Ext.Ajax.request({
				timeout: Asg.constants.TIMEOUT_SECONDS,
				url: option == "delete" ? Asg.constants.CONTEXT_PATH + "/admin/municipios/delete" : Asg.constants.CONTEXT_PATH + "/admin/municipios/toggle",
				params: {
					ctgMunicipioId: ctgMunicipioId, 
					ctgMunicipioActivo: ctgMunicipioActivo,
					ctgDepartamentoId : RedNacionalEmpleo.getCtgDepartamentoId()
					
				},
				callback: function(options, success, response){
					Ext.Msg.hide();
					var jsonObject = Asg.Utils.ajaxRequestGetJson(response);
					if(!success || !jsonObject){
						Asg.Message.alertInvalid(Asg.constants.DEFAULT_ERROR_MESSAGE);
						return
					}
					Asg.Message.alert(jsonObject.message || Asg.constants.DEFAULT_ERROR_MESSAGE);
					if(jsonObject.success){
						
						if(jsonObject.data) 
							Asg.Grid.loadData("gridMunicipios", jsonObject.data);
						return;
					}
				}
			});
		},
		addMunicipio: function(){
			if(!Asg.Grid.hasSelection("gridDepartamentos")){
				Asg.Message.alertInvalid("Debe seleccionar el Departamento que desea agregarle el Municipio");
				return;
			}
			Ext.getCmp("gridMunicipios").getStore().insert(0, ctgMunicipioModel.create());
 		    Ext.getCmp("gridMunicipios").editingPlugin.startEditByPosition({row: 0, column: 0});
		},
		saveOrUpdate : function(){
			var records = Ext.getCmp("gridMunicipios").getStore().data.filterBy(function(item){
				return item.dirty === true && item.isValid();
			}).items;
			if((!records || records.length == 0) && (!newRecords || newRecords.length == 0)){
				Asg.Message.alertInvalidFields("* No se encontraron registros nuevos, ni actualizados");
				return;
			}
			var jsonString = "";
			Ext.each(records, function(record){
				jsonString += (Ext.isEmpty(jsonString) ? "" : ",") + Ext.encode(record.data);
			});
			jsonString = "[" + jsonString + "]";
			Asg.Message.progress("Guardarndo Informaci\u00F3n...");
			Ext.Ajax.request({
				timeout: Asg.constants.TIMEOUT_SECONDS,
				url: Asg.constants.CONTEXT_PATH + "/admin/municipios/saveOrUpdateAll",
				params: {jsonString: jsonString, ctgDepartamentoId: RedNacionalEmpleo.getCtgDepartamentoId()},
				callback: function(options, success, response){
					Ext.Msg.hide();
					var jsonObject = Asg.Utils.ajaxRequestGetJson(response);
					if(!success || !jsonObject){
						Asg.Message.alertInvalid(Asg.constants.DEFAULT_ERROR_MESSAGE);
						return
					}
					Asg.Message.alert(jsonObject.message || Asg.constants.DEFAULT_ERROR_MESSAGE);
					if(jsonObject.success){
						if(jsonObject.data) 
							Asg.Grid.loadData("gridMunicipios", jsonObject.data);
					}
				}
			});
		},
		loadDepartamentos: function(){
			Asg.Message.progress("Cargando Informaci\u00F3n...");
			Ext.Ajax.request({
				timeout: Asg.constants.TIMEOUT_SECONDS,
			    url: Asg.constants.CONTEXT_PATH + "/admin/departamento/findByPaisId",
			    params : {
			    	ctgPaisId: RedNacionalEmpleo.getCtgPaisId()
			    },
			    callback: function(options, success, response){
			    	Ext.Msg.hide();
			    	if(success){
			    		var jsonObject = Asg.Utils.ajaxRequestGetJson(response);
			    		if(jsonObject && jsonObject.success){
			    			Asg.Grid.loadData("gridDepartamentos", jsonObject.departamentos);
			    		}
			    	}
			    }
			});
		},
		loadMunicipios: function(){
			Asg.Message.progress("Cargando Informaci\u00F3n...");
			Ext.Ajax.request({
				timeout: Asg.constants.TIMEOUT_SECONDS,
				url: Asg.constants.CONTEXT_PATH + "/admin/municipios/findMunByDepId",
			    params : {
			    	ctgDepartamentoId: RedNacionalEmpleo.getCtgDepartamentoId()
			    },
			    callback: function(options, success, response){
			    	Ext.Msg.hide();
			    	if(success){
			    		var jsonObject = Asg.Utils.ajaxRequestGetJson(response);
			    		if(jsonObject && jsonObject.success){
			    			Asg.Grid.loadData("gridMunicipios", jsonObject.municipios);
			    		}
			    	}
			    }
			});
		},
		confirmProcess: function(option, ctgMunicipioId, ctgMunicipioActivo){
			Asg.Message.confirm(
					option == "delete" ? Asg.constants.CONFIRM_DELETE_MESSAGE :
						(ctgMunicipioActivo == "1" ? Asg.constants.CONFIRM_INACTIVATE_MESSAGE : Asg.constants.CONFIRM_ACTIVATE_MESSAGE), function(btn){
				if(btn != "no") CtgMunicipio.processRegister(option, ctgMunicipioId, ctgMunicipioActivo);
			});
		},
		processRegister: function(option, ctgMunicipioId, ctgMunicipioActivo){
			Asg.Message.progress("Guardarndo Informaci\u00F3n...");
			Ext.Ajax.request({
				timeout: Asg.constants.TIMEOUT_SECONDS,
				url: option == "delete" ? Asg.constants.CONTEXT_PATH + "/admin/municipios/delete" : Asg.constants.CONTEXT_PATH + "/admin/municipios/toggle",
				params: {ctgMunicipioId: ctgMunicipioId, ctgMunicipioActivo: ctgMunicipioActivo},
				callback: function(options, success, response){
					Ext.Msg.hide();
					var jsonObject = Asg.Utils.ajaxRequestGetJson(response);
					if(!success || !jsonObject){
						Asg.Message.alertInvalid(Asg.constants.DEFAULT_ERROR_MESSAGE);
						return
					}
					Asg.Message.alert(jsonObject.message || Asg.constants.DEFAULT_ERROR_MESSAGE);
					if(jsonObject.success){
						if(jsonObject.data) 
							Asg.Grid.loadData("gridMunicipios", jsonObject.data);
					
						return;
					}
				}
			});
		},
		
		initConfig: function(config){
			config = config || {};
			Ext.define('ctgMunicipioModel', {
				extend: 'Ext.data.Model',
			    idProperty: "ctgMunicipioId",
			    fields: [
					{name: "ctgMunicipioId", type: "int"}, 
					{name: "ctgMunicipioNombre", type: "string"},
					{name: "ctgMunicipioActivo", type: "string", defaultValue: "1"}
				]
			});
			return {
				items: {
					border: false,
					flex: 1,
					layout: {
						type: "hbox",
						align : "stretch",
						pack  : "start"
					},
					items:[
				       {
				        	
				        	border: false,
				        	flex: 1,
				        	layout: {
								type: "vbox",
								align : "stretch",
								pack  : "start"
							},
							items: [
								{
									title: 'PAISES',
						        	 xtype: 'grid',
						        	 id: 'gridPaises',
					        		 frame: true,
					        		 minHeight: 125,
					        		 flex: 1,
					        		 margins: "15 15 15 15",
					        		 store: new Ext.data.SimpleStore({
										data: config.ctgPais || [],
										fields: ["id", "value"]
				        		 	 }),
				        		 	columns: [
			        		 	        new Ext.grid.RowNumberer(),
			  		        	        {header: "Nombre", dataIndex: "value",width: 100,flex: 1}
									],
									selModel:{
				        	            listeners: {
				        	            	selectionchange: function(selectionModel, rows){
				        	            		if(rows && rows.length > 0){
				        	            			RedNacionalEmpleo.setCtgPaisId(rows[0].get("id"));
				        	            			CtgMunicipio.loadDepartamentos();
				        	            		}
				        	            	}
				        	            }
									}
								},{
									 title: 'DEPARTAMENTOS',
						        	 xtype: 'grid',
						        	 id: 'gridDepartamentos',
					        		 frame: true,
					        		 flex: 1,
					        		 minHeight: 125,
					        		 margins: "15 15 15 15",
					        		 store: new Ext.data.SimpleStore({
										data: [],
								        fields: [
							                "ctgDepartamentoId", "ctgDepartamentoNombre", 
								            "ctgDepartamentoActivo", "ctgDepartamento.ctgPais.ctgCatalogoId"
								        ]
									 }),
				        		 	 columns: [
			        		 	          new Ext.grid.RowNumberer(),
										  {header: "Nombre", dataIndex: "ctgDepartamentoNombre",width: 100,flex: 1}
									],
									selModel:{
				        	            listeners: {
				        	            	selectionchange: function(selectionModel, rows){
				        	            		if(rows && rows.length > 0){
				        	            			RedNacionalEmpleo.setCtgDepartamentoId(rows[0].get("ctgDepartamentoId"));
				        	            			CtgMunicipio.loadMunicipios();
				        	            		}
				        	            	}
				        	            }
									}
								}
							]
				       }, {
				        	
				        	border: false,
				        	flex: 1,
				        	layout: {
								type: "vbox",
								align : "stretch",
								pack  : "start"
							},
							items: [
								{
									 title: 'MUNICIPIOS',
									 xtype: 'grid',
									 id: 'gridMunicipios',
									 frame: true,
									 flex: 1,
									 minHeight: 250,
									 margins: "15 15 15 15",
									 store: new Ext.data.SimpleStore({
										 data: [],
									     fields: [
								              "ctgMunicipioId", "ctgMunicipioNombre", 
								              "ctgMunicipioActivo", "ctgMunicipio.ctgDepartamento.ctgPais.ctgCatalogoId", 
								              "ctgMunicipio.ctgDepartamento.ctgPais.ctgCatalogoId"
							              ]
									 }),
									 columns: [
								          {
											header: "Nombre", 
											dataIndex: "ctgMunicipioNombre", 
											flex: 1, 
											minWidth: 150,
											field: {
												xtype: "textfield",
												enforceMaxLength: true,
												maxLength: 100,
												allowBlank: false
											}
										},{
							        		header: "Estado", 
							        		dataIndex: "ctgMunicipioActivo", 
							        		renderer: "webToActive", 
							        		width: 100,
							        		field: {
							        			xtype: "combo",
							        			store: new Ext.data.SimpleStore({
							        				data: Asg.Combo.activeInactiveArray() || [],
							        				fields: ["id", "value"]
							        			}),
							        			displayField: "value",
							        			valueField: "id",
						        				typeAhead: true,
						        				minChars: 1,
						        				queryMode: "local",
						        				forceSelection: true,
						        				triggerAction: "all"
						        			}
						        		 },
										  {
				  		        	        	xtype:"actioncolumn",
				  		        	        	align: "center",
				  		        	        	width: 60,
				  	        	            	items: [
				  	    	            	        {
				  			    	            		icon: Asg.constants.CONTEXT_PATH + "/resources/images/enableDisable.png",
				  			    	            		iconCls: "icon",
				  			    	            		tooltip: "Activar / Inactivar", 
				  			    	            		handler: function(grid, rowIndex, colIndex) {
				  			    	                        var record = grid.getStore().getAt(rowIndex);
				  			    	                        var ctgMunicipioId = record.get("ctgMunicipioId");
				  			    	                        if(record){
				  			    	                        	if(Ext.isEmpty(ctgMunicipioId) || ctgMunicipioId < 1){
				  		        	                        		Asg.Message.alertInvalid("Registro debe ser guardado primero para realizar esta operaci\u00F3n");
				  		        	                        		return;
				  		        	                        	}
				  			    	                        	CtgMunicipio.confirmProcess("toggle", record.get("ctgMunicipioId"), record.get("ctgMunicipioActivo"));
				  			    	                        }
				  			    	            		}
				  			            			},{
				  			    	            		icon: Asg.constants.CONTEXT_PATH + "/resources/images/delete.png",
				  			    	            		iconCls: "icon",
				  			    	            		tooltip: "Eliminar",
				  			    	            		handler: function(grid, rowIndex, colIndex) {
				  			    	                        var record = grid.getStore().getAt(rowIndex);
				  			    	                        if(record){
				  			    	                        	var ctgMunicipioId = record.get("ctgMunicipioId");
				  			    	                        	if(Ext.isEmpty(ctgMunicipioId) || ctgMunicipioId < 1){
				  		        	                        		grid.getStore().remove(record);
				  		        	                        		return;
				  		        	                        	}
				  			    	                        	CtgMunicipio.confirmProcess("delete", ctgMunicipioId, record.get("ctgMunicipioActivo"));
				  			    	                        }
				  			    	            		}
				  			            			}
				  		            			]
				  			        		}
									],
						            selType: 'cellmodel',
						            plugins: [
						                Ext.create('Ext.grid.plugin.CellEditing', {
						                    clicksToEdit: 1
						                })
						            ],
									tbar: [
					        	       "->",
					        	       {
					        	    	   text: "Agregar", 
					        	    	   iconCls: Asg.constants.ADD_ICON,
					        	    	   handler: function(){
					        	    		   CtgMunicipio.addMunicipio()
					        	    	   }
				        	    	   },
					        	       "-",
					        	       {text: "Guardar", iconCls: Asg.constants.SAVE_ICON, handler: CtgMunicipio.saveOrUpdate}
				        	        ]
								}
							]
				       }
			       ]
				}
			};
		}
	};
}();